// 手写 new
function myNew(constructor) {
    if(typeof constructor !== 'function') {
        throw 'myNew的第一个参数必须是构造函数'
    }
    // 创建一个新对象
    let newObj = Object.create(constructor.prototype);
    // 获取传入的参数
    let args = Array.from(arguments).slice(1);

    // 将新对象作为this的上下文，并获取参数
    let result = constructor.apply(newObj,args);

    // 判断构造函数的返回结果，如果是不是对象则返回新对象（即返回this），否则直接返回对象
    let originType = Object.prototype.toString.call(result);
    let isObject = originType === '[object object]';
    let isFunc = originType === '[object,Function]';
    if(isObject || isFunc) {
        return result;
    } else {
        return newObj;
    }

}

function Person(name,age) {
    this.name = name,
    this.age = age;

    Person.prototype.say = function() {
        console.log("你好："+ this.name);
    }
}


let obj = myNew(Person,'njy',21);
console.log(obj,'///');
// console.log(obj.say(),'----');
